﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QldtSdh.BLL;
using QldtSdh.DAL.Models;
using QldtSdh.GUI.Utils;

namespace QldtSdh.GUI.DuLieu
{
    public partial class FormQuanLyGiangVien : QldtSdh.GUI.Common.BaseDialog
    {
        bool allowUpdate = false;
        public FormQuanLyGiangVien()
        {
            InitializeComponent();
            gridData.AddRowIndexing();
            allowUpdate = false;
            InitGrid();
            if (LoadDonViPhuTrach())
                LoadGrid();
            allowUpdate = true;
        }

        void InitGrid()
        {
            gridData.AutoGenerateColumns = false;
            colMaGiangVien.DataPropertyName = "MaGiangVienDaoTaoDaiHoc";
            colHoDem.DataPropertyName = "HoDem";
            colTen.DataPropertyName = "Ten";
            colGioiTinh.DataPropertyName = "_GioiTinhStr";
            colNguonGianVien.DataPropertyName = "_NguonGiangVien";
            colHocHam.DataPropertyName = "HocHam";
            colHocVi.DataPropertyName = "HocVi";
        }

        bool LoadDonViPhuTrach()
        {
            var ls = BizDonViDaoTao.GetList();
            cmbDonViPhuTrach.DataSource = ls;
            cmbDonViPhuTrach.DisplayMember = "TenDonVi";
            cmbDonViPhuTrach.ValueMember = "MaDonViGUID";
            if (ls != null && ls.Count > 0)
            {
                btnThem.Enabled = true;
                return true;
            }
            else
            {
                btnThem.Enabled = false;
                return false;
            }
        }

        void LoadGrid()
        {
            if (btnThem.Enabled)
            {
                bsGiangVien.DataSource = new QldtSdh.Utils.MySortableBindingList<GiangVien>(BizGiangVien.GetList(cmbDonViPhuTrach.SelectedValue.ToString()));
                gridData.DataSource = bsGiangVien;
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            var current = bsGiangVien.Current as GiangVien;
            if (current != null)
            {
                if (DialogUtils.ConfirmedWithTitle("Chú ý", "Bạn có chắc chắn muốn xoá giảng viên [{0}] khỏi hệ thống không?", current._TenDayDu))
                {
                    try
                    {
                        var rs = BizGiangVien.Delete(current);
                        LoadGrid();
                    }
                    catch (Exception exc)
                    {
                        DialogUtils.ShowErrorWithDefaultTitle("Không thể xoá giảng viên.\n" + exc.Message);
                    }
                }
            }
        }

        private void bdData_CurrentChanged(object sender, EventArgs e)
        {
            var current = bsGiangVien.Current as GiangVien;
            if (current != null)
            {
                btnSua.Enabled = btnXoa.Enabled = true;
                //GiangVien_PropertyGrid pro = new GiangVien_PropertyGrid();
                //pro.DiaChi = current.DiaChi;
                //pro.Email = current.Email;
                //pro.GioiTinh = current._GioiTinhStr;
                //pro.HocHam = current.HocHam;
                //pro.HocVi = current.HocVi;
                //pro.HoTen = current.HoDem + " " + current.Ten;
                //pro.MaGiangVien = current.MaGiangVienDaoTaoDaiHoc;
                //pro.MaSoThue = current.MaSoThue;
                //pro.NgaySinh = current.NgaySinh;
                //pro.NguonGiangVien = current._NguonGiangVien;
                //pro.SoDienThoai = current.SoDienThoai;
                //propertyGridGiangVien.SelectedObject = pro;
            }
            else
            {
                btnSua.Enabled = btnXoa.Enabled = false;
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            var frm = new DuLieu.FormQuanLyGiangVien_ChiTiet(cmbDonViPhuTrach.SelectedItem as DonVi);
            frm.OnChanged += (o, t) =>
            {
                LoadGrid();
            };
            frm.ShowDialog();
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            var current = bsGiangVien.Current as GiangVien;
            if (current != null)
            {
                var frm = new DuLieu.FormQuanLyGiangVien_ChiTiet(cmbDonViPhuTrach.SelectedItem as DonVi, current);
                if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    LoadGrid();
            }
        }

        private void cmbDonViPhuTrach_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                LoadGrid();
            }
        }

        private void btnSynchronize_Click(object sender, EventArgs e)
        {
            DonVi donVi = null;
            if (cmbDonViPhuTrach.SelectedItem != null)
                donVi = cmbDonViPhuTrach.SelectedItem as DonVi;
            if (donVi == null)
                DialogUtils.ShowErrorWithDefaultTitle("Bạn phải chọn đơn vị phụ trách để đồng bộ danh sách giảng viên");
            var frm = new FormImportGiangVienDaiHoc(donVi);
            frm.NapDanhSachDonVi(this);
            frm.ShowDialog();
            if (frm.SoLuongImport + frm.SoLuongCapNhat > 0)
                LoadGrid();
        }

        private void gridData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (bsGiangVien.Count > 0 && e.RowIndex >= 0 && e.RowIndex < bsGiangVien.Count)
                btnSua.PerformClick();
        }
    }

    [DefaultPropertyAttribute("MaGiangVien")]
    public class GiangVien_PropertyGrid
    {
        private const string A = "A. Thông tin chung";
        [CategoryAttribute(A), DisplayName("1. Mã giảng viên"), Description("Mã giảng viên trong cơ sở dữ liệu quản lý nhân sự của Đại học Huế")]
        public string MaGiangVien { get; set; }
        [CategoryAttribute(A), DisplayName("2. Họ tên")]
        public string HoTen { get; set; }
        [CategoryAttribute(A), DisplayName("3. Giới tính")]
        public string GioiTinh { get; set; }
        [CategoryAttribute(A), DisplayName("4. Ngày sinh")]
        public string NgaySinh { get; set; }
        [CategoryAttribute(A), DisplayName("5. Mã số thuế")]
        public string MaSoThue { get; set; }
        [CategoryAttribute(A), DisplayName("6. Nguồn giảng viên")]
        public string NguonGiangVien { get; set; }

        private const string B = "B. Học vấn";
        [CategoryAttribute(B), DisplayName("1. Học hàm")]
        public string HocHam { get; set; }
        [CategoryAttribute(B), DisplayName("2. Học vị")]
        public string HocVi { get; set; }

        private const string C = "C. Thông tin liên lạc";
        [CategoryAttribute(C), DisplayName("1. Địa chỉ")]
        public string DiaChi { get; set; }
        [CategoryAttribute(C), DisplayName("2. Số điện thoại")]
        public string SoDienThoai { get; set; }
        [CategoryAttribute(C), DisplayName("3. Địa chỉ email")]
        public string Email { get; set; }
    }
}
